//#include <bits/stdc++.h>
//using namespace std;
//const int N = 100+10;
//int n,m;
//int a[N][N];
//int st[N][N];
//int cnt[N][N];
//int d[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
//typedef pair<int,int> PII;
//int bfs(int x,int y)
//{
//    queue<PII> q;
//    q.push({x,y});
//    st[x][y]=1;
//    while(!q.empty())
//    {
//        auto t=q.front();
//        q.pop();
//        if(t.first==n&&t.second==m)return cnt[n][m];
//
//        for(int i=0;i<4;i++)
//        {
//            int nx=t.first+d[i][0];
//            int ny=t.second+d[i][1];
//            if(nx>=1&&nx<=n&&ny>=1&&ny<=m&&st[nx][ny]==0&&a[nx][ny]==0)
//            {
//                q.push({nx,ny});
//                st[nx][ny]=1;
//                cnt[nx][ny]=cnt[t.first][t.second]+1;
//            }
//        }
//    }
//    return 0;
//}
//int main()
//{
//    ios::sync_with_stdio(false);
//    cin>>n>>m;
//    for(int i=1;i<=n;i++)
//    {
//        for(int j=1;j<=m;j++)
//        cin>>a[i][j];
//    }
//    cout<<bfs(1,1)<<endl;
//    return 0;
//}

////全球变暖
//#include <bits/stdc++.h>
//using namespace std;
//const int N=1e3+10;
//typedef pair<int,int> PII;
//char a[N][N];
//int st[N][N];
//int d[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
//void bfs(int x,int y,int& flag)
//{
//	queue<PII> q;
//	if(st[x][y]==1)return;
//	q.push({x,y});
//	st[x][y]=1;
//	while(!q.empty())
//	{
//		auto t=q.front();
//		q.pop();
//		x=t.first,y=t.second;
//  		if(a[x+1][y]=='#'&&a[x-1][y]=='#'&&a[x][y+1]=='#'&&a[x][y-1]=='#')flag=true;
//
//  		for(int i=0;i<4;i++)
//  		{
//			int nx=x+d[i][0];
//			int ny=y+d[i][1];
//			if(a[nx][ny]=='#'&&st[nx][ny]==0)
//			{
//				q.push({nx,ny});
//				st[nx][ny]=1;
//			}
//		}
//	}
//}
//int main()
//{
//	ios::sync_with_stdio(false);
//	int n,m;
//	cin>>n;
//	for(int i=1;i<=n;i++)
//	{
//		for(int j=1;j<=n;j++)
//		{
//			cin>>a[i][j];
//		}
//	}
//	int res=0;
//	for(int i=1;i<=n;i++)
//	{
//		for(int j=1;j<=n;j++)
//		{
//			if(a[i][j]=='#'&&st[i][j]==0)
//			{
//				int flag=false;
//				bfs(i,j,flag);
//				if(!flag)res++;
//			}
//		}
//	}
//	cout<<res<<endl;
//	return 0;
//}



//#include <bits/stdc++.h>
//using namespace std;
//const int N = 10;
//
//int k,n,m;
//int a[N][N];
//int d[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
//unordered_set<int> st;
//void dfs(int u,int x,int y,string path)
//{
//    if(u==k+1)
//    {
//        st.insert(stoi(path));
//    }
//
//    for(int i=0;i<4;i++)
//    {
//        int nx=x+d[i][0];
//        int ny=y+d[i][1];
//        dfs(u+1,nx,ny,path+to_string(a[x][y]));
//    }
//}
//
//int main()
//{
//    cin>>n>>m>>k;
//    for(int i=1;i<=n;i++)
//    {
//        for(int j=1;j<=m;j++)
//        cin>>a[i][j];
//    }
//    for(int i=1;i<=n;i++)
//    {
//        for(int j=1;j<=m;j++)
//        dfs(0,i,j,"");
//    }
//
//    cout<<st.size()<<endl;
//}

//
//#include <bits/stdc++.h>
//using namespace std;
//const int N = 1e3+10;
//const int V=2*1e4 +10;
//int dp[V];
//int v[V][V],w[V][V],s[V];
//int main()
//{
//	cout<<1<<endl;
//    return 0;
//}


//#include <bits/stdc++.h>
//using namespace std;
//const int N = 1e3+10;
//const int V=2*1e4 +10;
//int dp[V];
//int v[N],w[N],s[N];
//int v1[V],w1[V],s1[V];
//int main()
//{
//    ios::sync_with_stdio(false);
//    int n,m;
//    cin>>n>>m;
//    int idx=1;
//    for(int i=1;i<=n;i++)
//    {
//        cin>>v[i]>>w[i]>>s[i];
//    }
//
//    for(int i=1;i<=n;i++)
//    {
//        for(int j=1;j<=s[i];j++)
//        {
//            v1[idx]=v[i][j];
//            w1[idx]=w[i][j];
//            idx++;
//        }
//    }
//    idx--;
//
//    for(int i=1;i<=idx;i++)
//    {
//        for(int j=m;j>=v1[i];j--)
//        {
//            dp[j]=max(dp[j],dp[j-v1[i]]+w1[i]);
//        }
//    }
//    cout<<dp[m]<<endl;
//    return 0;
//}


//
//#include <bits/stdc++.h>
//using namespace std;
//const int N = 500+10;
//int dp[N];
//vector<vector<int>> g;
//int main()
//{
//    ios::sync_with_stdio(false);
//    int n;
//    cin>>n;
//    for(int i=1;i<=n;i++)
//    {
//        vector<int> v;
//        string str;
//        getline(cin,str);
//        int fsp=0,slp=0;
//        string s;
//        for(;fsp<str.size();fsp++)
//        {
//            if(str[fsp]=='0')
//            {
//                s=str.substr(slp,fsp-slp);
//                slp=fsp+1;
//                v.push_back(stoi(s));
//                s.clear();
//            }
//        }
//
//            s=str.substr(slp,fsp-slp);
//            slp=fsp+1;
//            v.push_back(stoi(s));
//            s.clear();
//        g.push_back(v);
//    }
//
//    for(int i=0;i<g.size();i++)
//    {
//        for(int j=0;j<g[i].size();j++)
//        cout<<g[i][j]<<' ';
//        cout<<endl;
//    }
//    return 0;
//}



//1.按行输入
//#include <bits/stdc++.h>
//#include <sstream>
//using namespace std;
//int main()
//{
//	int n;
//	cin>>n;
//    cin.ignore();//getline()用来读取一行数据，但是当getline()前面进行了cin输入的话，getline()会把进行cin输入时行末丢弃的换行符读入，从而造成getline()第一次获得的数据为一空行。
//	//scanf立即就getline会有问题，可以用getchar或者cin.ignore去掉丢弃的换行符。若是cin立即就getline会有问题，用cin.ignore或者getchar去掉丢弃的换行符。意思就是cin或者scanf之后立即getline用
//	//cin.ignore或getchar()都可以
//
//
//	for(int i=1;i<=n;i++)//为什么要先getline进字符串里再用getline切割呢，为什么不直接getline切割放到数组里面就好了呢。是因为只能每次只输入一次，他这一次是输入一行的，而且不知道输入的个数，所以要用getline，直接整行拿上来。
//	//然后我们又想提取一行中的数分离出来，所以又要用到getline。步骤就是，先读上来到str，然后再对str进行getline(str要封装进isstringstream之后才能getline,getline无法直接对string类进行，要放进流中才行。)
//	//用getline(str-封装进流里面之后的，tmp,' ')的效果等价于用substr来按' '提取str中的子串
//	{
//	string str;
//	getline(cin,str);
//    istringstream lss(str);
//        string tmp;
//        while(getline(lss,tmp,' '))cout<<tmp<<endl;
//	}
//	return 0;
//}


//#include <bits/stdc++.h>
//#include <sstream>
//using namespace std;
//const int N = 500+10;
//int dp[N];
//vector<vector<int>> g;
//int main()
//{
//    // ios::sync_with_stdio(false);
//    int n;
//    cin>>n;
//    // cin.ignore();
//    getchar();
//    for(int i=1;i<=n;i++)
//    {
//
//        vector<int> v;
//        string str;
//
//        getline(cin,str);
//
//        // cout<<str<<endl;
//        int fsp=0,slp=0;
//        string s;
//        for(;fsp<str.size();fsp++)
//        {
//            if(str[fsp]=='0')
//            {
//                s=str.substr(slp,fsp-slp);
//                slp=fsp+1;
//                v.push_back(stoi(s));
//                s.clear();
//            }
//        }
//
//            s=str.substr(slp,fsp-slp);
//            slp=fsp+1;
//            v.push_back(stoi(s));
//            s.clear();
//        g.push_back(v);
//    }
//
//    for(int i=0;i<g.size();i++)
//    {
//        for(int j=0;j<g[i].size();j++)
//        cout<<g[i][j]<<' ';
//        cout<<endl;
//    }
//    return 0;
//}


//#include <bits/stdc++.h>
//using namespace std;
//const int N=1e5+10;
//int dp[N];
//typedef long long ll;
//int v[N],w[N];//这里的价值=物品的重量(体积)
//int main()
//{
//	ios::sync_with_stdio(false);
//	int n;
//	cin>>n;
//	ll sum=0;
//	for(int i=1;i<=n;i++)
//	{
//		cin>>v[i];
//		w[i]=v[i];
//		sum+=v[i];
//	}
//
//	for(int i=1;i<=n;i++)
//	{
//		for(int j=sum;j>=0;j--)
//		{
//			dp[j]+=dp[j-v[i]];
//		}
//	}
//	cout<<dp[sum]<<endl;
//	return 0;
//}


//#include <bits/stdc++.h>
//using namespace std;
//const int N=1e5+10;
//unordered_set<int> st;
//int n;
//int a[N];
//void dfs(int u,int sum)
//{
////	cout<<abs(sum)<<endl;
//	if(sum>0)
//	st.insert(abs(sum));
//	if(u==n+1)
//	{
//		return ;
//	}
//	dfs(u+1,sum);
//	dfs(u+1,sum+a[u]);
//	dfs(u+1,sum-a[u]);
//}
//int main()
//{
//	ios::sync_with_stdio(false);
//	cin>>n;
//	for(int i=1;i<=n;i++)cin>>a[i];
//	dfs(1,0);
//	cout<<st.size()<<endl;
//	return 0;
//}


////#include <bits/stdc++.h>
//#include <iostream>
//using namespace std;
//const int N = 2022;
//const int INF = 1e9;
//int dp[N][N];
//int gcd(int a, int b)
//{
//	if (b == 0)return a;
//	return gcd(b, a % b);
//}
//int lcb(int a, int b)
//{
//	int c = a * b;
//	return c / gcd(a, b);
//}
//void floyd()
//{
//	for (int k = 1; k <= 2021; k++)
//	{
//		for (int i = 1; i <= 2021; i++)
//		{
//			for (int j = 1; j <= 2021; j++)
//			{
//				dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j]);
//			}
//		}
//	}
//}
//int main()
//{
//	for (int i = 1; i <= 2021; i++)
//	{
//		for (int j = 1; j <= 2021; j++)
//		{
//			if (i == j)dp[i][j] = 0;
//  			else if (abs(i-j) <= 21)dp[i][j] = lcb(i, j);
//			else dp[i][j] = INF;
//		}
//	}
//	floyd();
//	cout << dp[1][2021] << endl;
//	return 0;
//}


#include <bits/stdc++.h>

using namespace std;
string tmp[3];//year month day
vector< vector<string>> v;
static int a[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
bool cmp(vector<string>& v1, vector<string>& v2)
{

	if (stoi(v1[0]) != stoi(v2[0]));//为假才换，为真不换
	return stoi(v1[0])< stoi(v2[0]);
	if (stoi(v1[1]) != stoi(v2[1]))
	return stoi(v1[1]) < stoi(v2[1]);

	return stoi(v1[2]) < stoi(v2[2]);

}
bool cmp1(int a, int b)
{
	return a < b;
}
bool checkyear(string s)
{
	return true;
}
bool checkmonth(string s)
{
	int month = stoi(s);
	if(month>=1&&month<=12)
	return true;

	return false;
}
bool checkday(string syear,string smonth,string sday)
{
	syear = "20" + syear;
	int year = stoi(syear);
	int month = stoi(smonth);
	int day = stoi(sday);
	int val = a[month];
	if (month == 2 && ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0))val = 29;
	if (day > val)return false;

	return true;
}
void shift()
{
	string t = tmp[2];
	for (int i = 3; i >=1; i--)
	{
		tmp[i] = tmp[i - 1];
	}
	tmp[0] = t;
}
int main()
{
	string time;
	cin >> time;
	istringstream iss(time);
	int i = 0;
	while (getline(iss, tmp[i++], '/'));
	//for (int i = 0; i < 3; i++)cout << tmp[i] << ' ';
	int cnt = 2;
	do
	{
		bool flag1 = checkyear(tmp[0]);
		bool flag2 = checkmonth(tmp[1]);
		bool flag3 = checkday(tmp[0],tmp[1],tmp[2]);
		if (flag1 && flag2 && flag3)
		{
			vector<string> v1;
			v1.push_back("20"+tmp[0]);
			v1.push_back(tmp[1]);
			v1.push_back(tmp[2]);
			v.push_back(v1);

		}
		for (int i = 0; i < 3; i++)cout << tmp[i] << ' ';
		cout << endl;
		shift();
	} while (cnt--);
	sort(v.begin(), v.end(), cmp);
	/*for (int i = 0; i < v.size(); i++)
	{
		cout << v[i][0] << '-' << v[i][1] << '-' << v[i][2] << endl;
	}*/
	return 0;
}